var _ = require("lodash");

// _.union([arrays])
// 创建一个按顺序排列的唯一值的数组。所有给定数组的元素值使用SameValueZero做等值比较
// 这个顺序指的是数组的顺序，并不是元素的大小排序
// 返回值是所有数组的并集，并且是去重的
let arr1 = [2, 3, 5];
let arr2 = [1, 2, 6];
let arr3 = [3, 5, 7];

let a = _.union(arr1, arr2, arr3);
// console.log(a);

// _.unionBy([arrays], [iteratee=_.identity])
// 它有一个迭代器，使用它对所有参数的元素进行处理，处理的结果就是用来计算的标准
let b = _.unionBy([2.1], [1.2, 2.3], Math.floor);
// console.log(b);

let c = _.unionBy([{ x: 1 }], [{ x: 2 }, { x: 1 }], "x");
// console.log(c);

// _.unionWith([arrays], [comparator])
// 他会对所数组的元素都调用一次比较器进行比较，如果比较的结果为真
// 那就只保留第一次出现的元素
var objects = [
  { x: 1, y: 2 },
  { x: 2, y: 1 },
];
var others = [
  { x: 1, y: 1 },
  { x: 1, y: 2 },
];
let d = _.unionWith(objects, others, _.isEqual);
// console.log(d);

function test(a, b) {
  return a.y == b.y;
}
let e = _.unionWith(objects, others, test);
console.log(e);
